{
 "cells": [
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 数据挖掘 作业2 频繁模式与关联规则挖掘\n",
    "\n",
    "## 任务：网页浏览行为关联规则挖掘\n",
    "\n",
    "**姓名：陈康冰**\n",
    "\n",
    "**学号：3220220897**"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**代码仓库地址：** https://gitee.com/ckblau/dm2023-homework"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [],
   "source": [
    "import csv\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from mlxtend.preprocessing import TransactionEncoder\n",
    "from mlxtend.frequent_patterns import apriori, association_rules"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1. 数据预处理\n",
    "\n",
    "清洗数据，处理缺失值，提取用户浏览记录。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [],
   "source": [
    "path = ['anonymous-msweb.data','anonymous-msweb.test']\n",
    "\n",
    "def load_data(path):\n",
    "    attr_dict = {}\n",
    "    user_case = []\n",
    "    c = []\n",
    "    f = open(path, 'r')\n",
    "    reader = csv.reader(f)\n",
    "    for row in reader:\n",
    "        if row[0] == 'A':\n",
    "            attr_dict[row[1]] = row[4]\n",
    "        elif row[0] == 'C':\n",
    "            user_case.append(c)\n",
    "            #c = [row[1]]\n",
    "            c = []\n",
    "        elif row[0] == 'V':\n",
    "            c.append(attr_dict[row[1]])\n",
    "    return user_case[1:], attr_dict"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[['/regwiz', '/support', '/athome'],\n",
       " ['/support', '/kb'],\n",
       " ['/support', '/kb', '/search'],\n",
       " ['/norge'],\n",
       " ['/misc'],\n",
       " ['/kb', '/search'],\n",
       " ['/ie_intl'],\n",
       " ['/search'],\n",
       " ['/msdownload', '/windows'],\n",
       " ['/vbasic',\n",
       "  '/regwiz',\n",
       "  '/officedev',\n",
       "  '/outlookdev',\n",
       "  '/vbasicsupport',\n",
       "  '/officefreestuff']]"
      ]
     },
     "execution_count": 69,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data, attr = load_data(path[0])\n",
    "data[0:10]"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2. 数据探索性分析\n",
    "\n",
    "分析最常被访问的页面、页面访问量分布等。"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "显示最常被访问的10个页面"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Site</th>\n",
       "      <th>Freq</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>/msdownload</td>\n",
       "      <td>10835</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>/ie</td>\n",
       "      <td>9383</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>/search</td>\n",
       "      <td>8463</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>/isapi</td>\n",
       "      <td>5330</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>/products</td>\n",
       "      <td>5108</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>/windows</td>\n",
       "      <td>4628</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>/support</td>\n",
       "      <td>4451</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>/sitebuilder</td>\n",
       "      <td>3220</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>/kb</td>\n",
       "      <td>2968</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>/gallery</td>\n",
       "      <td>2123</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           Site   Freq\n",
       "0   /msdownload  10835\n",
       "1           /ie   9383\n",
       "2       /search   8463\n",
       "3        /isapi   5330\n",
       "4     /products   5108\n",
       "5      /windows   4628\n",
       "6      /support   4451\n",
       "7  /sitebuilder   3220\n",
       "8           /kb   2968\n",
       "9      /gallery   2123"
      ]
     },
     "execution_count": 70,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "count = {}\n",
    "for k, v in attr.items():\n",
    "    count[v] = 0\n",
    "for i in data:\n",
    "    for j in i:\n",
    "        count[j] += 1\n",
    "count_s = sorted(count.items(), key=lambda x: x[1], reverse=True)\n",
    "count_df = pd.DataFrame(count_s, columns=[\"Site\", \"Freq\"])\n",
    "count_df[0:10]"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "显示整体页面访问分布情况"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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AABw2ur0I0BHjx6VxxPZrNfrdS6Dz8vLU3Z2ttasWeM8X1dXp7Vr1zrhZujQoYqJiYmoU15ers2bNzt1hg8frlAopI0bNzp13nrrLYVCIacOAABANJ1+BOjKK6/Ufffdpz59+ugrX/mK3nnnHS1dulTf/e53JZ342mrOnDlauHCh8vPzlZ+fr4ULFyohIUHTpk2TJAWDQc2YMUNz585Venq60tLSdNttt2nQoEEaO3asJGngwIGaMGGCZs6cqccee0ySNGvWLE2ePFn9+/fv7NkCAABnkE4PQI888oh+/OMf68Ybb9TevXuVk5Oj66+/Xv/xH//h1LnjjjtUU1OjG2+8UVVVVSosLNTq1auVnJzs1HnwwQfl8/k0depU1dTUaMyYMfrVr34lr9fr1HnmmWd0yy23OFeLTZkyRcuWLevsWQIAAGcYyxhjunsiukt1dbWCwaBCoZDOX/i6/rF4kvrNe1H/WDypuycNAACcRHj/HQgE2tUGvwUGAABchwAEAABchwAEAABchwAEAABchwAEAABchwAEAABchwAEAABchwAEAABchwAEAABchwAEAABchwAEAABchwAEAABchwAEAABchwAEAABchwAEAABchwAEAABchwAEAABchwAEAABchwAEAABchwAEAABchwAEAABchwAEAABchwAEAABchwAEAABchwAEAABchwAEAABchwAEAABchwAEAABchwAEAABchwAEAABchwAEAABchwAEAABchwAEAABchwAEAABchwAEAABchwAEAABchwAEAABchwAEAABchwAEAABchwAEAABchwAEAABchwAEAABchwAEAABchwAEAABchwAEAABchwAEAABchwAEAABchwAEAABchwAEAABchwAEAABchwAEAABchwAEAABchwAEAABchwAEAABcp0sC0Keffqprr71W6enpSkhI0ODBg1VSUuI8b4zRggULlJOTo/j4eI0ePVplZWURbdTW1mr27NnKyMhQYmKipkyZoj179kTUqaqqUlFRkYLBoILBoIqKinTw4MGumCUAAHAG6fQAVFVVpUsvvVQxMTF66aWXtGXLFj3wwANKSUlx6ixZskRLly7VsmXLtGnTJmVnZ2vcuHE6dOiQU2fOnDlatWqVVq5cqXXr1unw4cOaPHmyGhoanDrTpk1TaWmpiouLVVxcrNLS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AOD0c9qeAwQAANBeBCAAAOA6BCAAAOA6BCAAAOA6BKAWcH44AABnptP6Mvj22LNnj5YvX67169eroqJClmUpKytLI0aM0A033KDc3Fynrt/v17vvvquBAwdKksrLy7V8+XKtW7dO5eXl8nq9ysvL0ze+8Q1Nnz5dXq+3u2YLAAC0gasug1+3bp0mTpyo3NxcjR8/XmlpadqzZ49efvllVVZWqra2Vt/85jf1+eefa+PGjTp06JB69+6tI0eOqLq6Wg0NDUpMTFRSUpIqKysVCATUq1cvlZeXa+DAgfrLX/4ScZvulhw5ckQrVqxwgtixY8eUkZGhvn376tZbb1VsbKzuuecebd++XevXr9fcuXNVUlKi999/X4FAQIFAQMYYffzxx7IsS1/5ylf0ox/9SGPGjGn18jjVNOTm5upvf/ubFixYoGPHjmnXrl2aNm2ann/+eR08eFDZ2dk666yztHfvXv3jH/9QfHy8rrrqKj344INtWi9Np8OyLMXExKhv3766/fbbnem455575Pf79fbbb2v69OldPh0tLY+amhp99NFHOv/88/XJJ5846+T48ePatm2b6uvrlZiYqD59+uicc875Qtcr0JWMMfrrX/8a8X7NyMhQfn6+vvOd7ygmJka7du3SwoUL5fP5tGHDBt14441asWKFKisrNWrUKA0fPly//e1vtWHDBh0/flzZ2dm67LLLVFhY2Ko2zj77bOXl5emdd97Rtm3bJEkDBw7U6NGjdfbZZ0e08V//9V+qq6vT9u3bNWPGjA618c4772jEiBF69913lZWVpcTERFmWpddee001NTXKyMjQ4MGDde6553ZqG4cPH9azzz6rhIQE3XHHHVq8eLG2bt2q1157rc1tlJWV6cUXX9R9992n0tJSp42EhARVVlbqvffec9bJmDFjNGXKFJ199tnq06ePDh061OY22rJeW7ttVFZW6t5779XFF1+swYMHa/Dgwe3all0VgC6++GKNHDlSDz74oLZv367x48dr586dEXXi4uJ07Nixk7Zx4YUX6u9//7v69Omjzz//XPX19erdu7f279+vfv366YUXXmixww6FQjr77LO1detWHTt2TJZl6fjx482+bps4caJeeumlk06H1+tVQ0ODJCkxMVFHjhyRdOK3UaZOnarvf//7LXa2fr9fu3btUmNjozweT9Rp6NGjhw4c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Bq6TJk3Sb3/7Wx05ckTTp093yqLV70gZ4zrzxrVnzx7169fPuZHt1KlT9fTTTys2NlbXXXdd23eo7TpzCEC3aHq/npPdy6cjZV3VrpvG1d3j76p21Qkn1zIwdHR49913jcfjcS5w8Xg87dqfEoCAL5GO3GiztWVN24hW1p523TSu7h5/d4/Lvpor/BYM4R2UfZXPqW7gGn7FWNP6HSljXGfeuOzbM0hy7rlFAALOIPabObwzYWA4XYdoN3AND0vhoapp/Y6UMa4zb1z27S2kf94n7K233upQADpxXSCAL4WePXvq97//vXJycrRq1Srl5OQoLS3N+Xvp0qWSpEAgIMuynN91aktZeBvRytrbrpvG1d3j785xWZalxMRE51GSJk6cqHBer1dS5I8DX3rppc3Kzj///JPW70gZ4zrzxvXaa685z11++eWSpMmTJ6sjCEDAl8jQoUP197//PeIxPT3d+Xvbtm2STtxryRij8847z3lta8vC24hW1t523TSu7h5/d47LGKN+/fo5j9I/OzCbiXJtzfr1609aFq1+R8oY15k3LvteUtKJH0G2y6K111pcBQZ8ibz++us6cuSIEhMTnUf7RpuJiYnav3+/du/eHXGjzY0bNyoYDLa6LDc312mjsbGxWVl723XTuLp7/N01rldeeUWHDh3SxIkT9dJLL2nixIn6+c9/rvPOO085OTn685//rL179zo35iwsLHRu4NqnTx/t2rXLeS5aWXj9jpQxrjNvXN/73ve0fPlyWZalG264QY8++qhuuOEGpyz8xomtRQACAACuw1dgAADAdQhAAADAdQhAAADAdQhAAADAdQhAAADAdQhAAADAdQhAAADAdf4/745qsEivJv0AAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "count_df.plot(kind=\"bar\")\n",
    "plt.show()"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3. 关联规则挖掘\n",
    "\n",
    "使用Apriori算法或FP-growth算法，根据用户浏览记录计算频繁项集和关联规则。"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "使用Apriori算法，需要先对数据进行OneHot编码\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>/access</th>\n",
       "      <th>/accessdev</th>\n",
       "      <th>/activeplatform</th>\n",
       "      <th>/activex</th>\n",
       "      <th>/adc</th>\n",
       "      <th>/ado</th>\n",
       "      <th>/ads</th>\n",
       "      <th>/advtech</th>\n",
       "      <th>/argentina</th>\n",
       "      <th>/atec</th>\n",
       "      <th>/athome</th>\n",
       "      <th>/australia</th>\n",
       "      <th>/automap</th>\n",
       "      <th>/backoffice</th>\n",
       "      <th>/belgium</th>\n",
       "      <th>/benelux</th>\n",
       "      <th>/brasil</th>\n",
       "      <th>/business</th>\n",
       "      <th>/canada</th>\n",
       "      <th>/caribbean</th>\n",
       "      <th>/catalog</th>\n",
       "      <th>/channel_resources</th>\n",
       "      <th>/chile</th>\n",
       "      <th>/china</th>\n",
       "      <th>/cinemania</th>\n",
       "      <th>/cio</th>\n",
       "      <th>/clipgallerylive</th>\n",
       "      <th>/college</th>\n",
       "      <th>/colombia</th>\n",
       "      <th>/controls</th>\n",
       "      <th>/corpinfo</th>\n",
       "      <th>/corporate_solutions</th>\n",
       "      <th>/cze</th>\n",
       "      <th>/danmark</th>\n",
       "      <th>/devdays</th>\n",
       "      <th>/developer</th>\n",
       "      <th>/developr</th>\n",
       "      <th>/devnews</th>\n",
       "      <th>/devonly</th>\n",
       "      <th>/devvideos</th>\n",
       "      <th>...</th>\n",
       "      <th>/train_cert</th>\n",
       "      <th>/transaction</th>\n",
       "      <th>/trial</th>\n",
       "      <th>/truetype</th>\n",
       "      <th>/turkey</th>\n",
       "      <th>/uk</th>\n",
       "      <th>/uruguay</th>\n",
       "      <th>/usa</th>\n",
       "      <th>/usability</th>\n",
       "      <th>/vba</th>\n",
       "      <th>/vbasic</th>\n",
       "      <th>/vbasicsupport</th>\n",
       "      <th>/vbscript</th>\n",
       "      <th>/vbscripts</th>\n",
       "      <th>/venezuela</th>\n",
       "      <th>/vfoxpro</th>\n",
       "      <th>/vfoxprosupport</th>\n",
       "      <th>/vinterdev</th>\n",
       "      <th>/visualc</th>\n",
       "      <th>/visualcsupport</th>\n",
       "      <th>/visualj</th>\n",
       "      <th>/visualjsupport</th>\n",
       "      <th>/vrml</th>\n",
       "      <th>/vstudio</th>\n",
       "      <th>/vtest</th>\n",
       "      <th>/vtestsupport</th>\n",
       "      <th>/win32dev</th>\n",
       "      <th>/win32devsupport</th>\n",
       "      <th>/windows</th>\n",
       "      <th>/windows95</th>\n",
       "      <th>/windowsce</th>\n",
       "      <th>/windowssupport</th>\n",
       "      <th>/wineguide</th>\n",
       "      <th>/word</th>\n",
       "      <th>/worddev</th>\n",
       "      <th>/works</th>\n",
       "      <th>/workshoop</th>\n",
       "      <th>/workshop</th>\n",
       "      <th>/workssupport</th>\n",
       "      <th>/worldwide</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>...</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>...</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>...</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>...</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>...</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>32705</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>...</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>32706</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>...</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>32707</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>...</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>32708</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>...</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>32709</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>...</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>32710 rows × 285 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       /access  /accessdev  ...  /workssupport  /worldwide\n",
       "0        False       False  ...          False       False\n",
       "1        False       False  ...          False       False\n",
       "2        False       False  ...          False       False\n",
       "3        False       False  ...          False       False\n",
       "4        False       False  ...          False       False\n",
       "...        ...         ...  ...            ...         ...\n",
       "32705    False       False  ...          False       False\n",
       "32706    False       False  ...          False       False\n",
       "32707    False       False  ...          False       False\n",
       "32708    False       False  ...          False       False\n",
       "32709    False       False  ...          False       False\n",
       "\n",
       "[32710 rows x 285 columns]"
      ]
     },
     "execution_count": 72,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "te = TransactionEncoder()\n",
    "te_ary = te.fit(data).transform(data)\n",
    "df = pd.DataFrame(te_ary, columns=te.columns_)\n",
    "df"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "接下来使用Apriori算法进行计算"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>support</th>\n",
       "      <th>itemsets</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.022898</td>\n",
       "      <td>(/athome)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.064904</td>\n",
       "      <td>(/gallery)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.044207</td>\n",
       "      <td>(/games)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.286854</td>\n",
       "      <td>(/ie)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.026445</td>\n",
       "      <td>(/ie_intl)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0.162947</td>\n",
       "      <td>(/isapi)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>0.090737</td>\n",
       "      <td>(/kb)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>0.033231</td>\n",
       "      <td>(/msdn)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>0.331244</td>\n",
       "      <td>(/msdownload)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>0.034087</td>\n",
       "      <td>(/ntserver)</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    support       itemsets\n",
       "0  0.022898      (/athome)\n",
       "1  0.064904     (/gallery)\n",
       "2  0.044207       (/games)\n",
       "3  0.286854          (/ie)\n",
       "4  0.026445     (/ie_intl)\n",
       "5  0.162947       (/isapi)\n",
       "6  0.090737          (/kb)\n",
       "7  0.033231        (/msdn)\n",
       "8  0.331244  (/msdownload)\n",
       "9  0.034087    (/ntserver)"
      ]
     },
     "execution_count": 73,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "freq_itemsets = apriori(df, min_support=0.02, use_colnames=True)\n",
    "freq_itemsets[0:10]\n"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "生成关联规则"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [],
   "source": [
    "rules = association_rules(freq_itemsets, metric=\"confidence\", min_threshold=0.7)"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4. 结果评估\n",
    "\n",
    "计算关联规则的支持度、置信度和提升度，得出强关联规则。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>antecedents</th>\n",
       "      <th>consequents</th>\n",
       "      <th>antecedent support</th>\n",
       "      <th>consequent support</th>\n",
       "      <th>support</th>\n",
       "      <th>confidence</th>\n",
       "      <th>lift</th>\n",
       "      <th>leverage</th>\n",
       "      <th>conviction</th>\n",
       "      <th>zhangs_metric</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>(/windowssupport)</td>\n",
       "      <td>(/isapi)</td>\n",
       "      <td>0.054754</td>\n",
       "      <td>0.162947</td>\n",
       "      <td>0.046072</td>\n",
       "      <td>0.841429</td>\n",
       "      <td>5.163819</td>\n",
       "      <td>0.037150</td>\n",
       "      <td>5.278738</td>\n",
       "      <td>0.853053</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>(/sbnmember)</td>\n",
       "      <td>(/sitebuilder)</td>\n",
       "      <td>0.033935</td>\n",
       "      <td>0.098441</td>\n",
       "      <td>0.027301</td>\n",
       "      <td>0.804505</td>\n",
       "      <td>8.172467</td>\n",
       "      <td>0.023960</td>\n",
       "      <td>4.611662</td>\n",
       "      <td>0.908466</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>(/windows95)</td>\n",
       "      <td>(/windows)</td>\n",
       "      <td>0.035463</td>\n",
       "      <td>0.141486</td>\n",
       "      <td>0.032437</td>\n",
       "      <td>0.914655</td>\n",
       "      <td>6.464644</td>\n",
       "      <td>0.027419</td>\n",
       "      <td>10.059358</td>\n",
       "      <td>0.876392</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>(/ie, /windows)</td>\n",
       "      <td>(/msdownload)</td>\n",
       "      <td>0.031275</td>\n",
       "      <td>0.331244</td>\n",
       "      <td>0.023938</td>\n",
       "      <td>0.765396</td>\n",
       "      <td>2.310669</td>\n",
       "      <td>0.013578</td>\n",
       "      <td>2.850571</td>\n",
       "      <td>0.585538</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>(/isapi, /kb)</td>\n",
       "      <td>(/support)</td>\n",
       "      <td>0.046897</td>\n",
       "      <td>0.136075</td>\n",
       "      <td>0.033231</td>\n",
       "      <td>0.708605</td>\n",
       "      <td>5.207474</td>\n",
       "      <td>0.026850</td>\n",
       "      <td>2.964791</td>\n",
       "      <td>0.847724</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>(/windowssupport, /kb)</td>\n",
       "      <td>(/isapi)</td>\n",
       "      <td>0.024152</td>\n",
       "      <td>0.162947</td>\n",
       "      <td>0.021156</td>\n",
       "      <td>0.875949</td>\n",
       "      <td>5.375667</td>\n",
       "      <td>0.017220</td>\n",
       "      <td>6.747671</td>\n",
       "      <td>0.834122</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>(/windowssupport, /msdownload)</td>\n",
       "      <td>(/isapi)</td>\n",
       "      <td>0.027209</td>\n",
       "      <td>0.162947</td>\n",
       "      <td>0.024641</td>\n",
       "      <td>0.905618</td>\n",
       "      <td>5.557742</td>\n",
       "      <td>0.020207</td>\n",
       "      <td>8.868775</td>\n",
       "      <td>0.843008</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>(/windowssupport, /support)</td>\n",
       "      <td>(/isapi)</td>\n",
       "      <td>0.029593</td>\n",
       "      <td>0.162947</td>\n",
       "      <td>0.024243</td>\n",
       "      <td>0.819215</td>\n",
       "      <td>5.027489</td>\n",
       "      <td>0.019421</td>\n",
       "      <td>4.630098</td>\n",
       "      <td>0.825524</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>(/windowssupport, /windows)</td>\n",
       "      <td>(/isapi)</td>\n",
       "      <td>0.032834</td>\n",
       "      <td>0.162947</td>\n",
       "      <td>0.028737</td>\n",
       "      <td>0.875233</td>\n",
       "      <td>5.371269</td>\n",
       "      <td>0.023387</td>\n",
       "      <td>6.708916</td>\n",
       "      <td>0.841453</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>(/windowssupport, /msdownload)</td>\n",
       "      <td>(/windows)</td>\n",
       "      <td>0.027209</td>\n",
       "      <td>0.141486</td>\n",
       "      <td>0.022440</td>\n",
       "      <td>0.824719</td>\n",
       "      <td>5.828989</td>\n",
       "      <td>0.018590</td>\n",
       "      <td>4.897934</td>\n",
       "      <td>0.851615</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>(/windowssupport, /msdownload, /isapi)</td>\n",
       "      <td>(/windows)</td>\n",
       "      <td>0.024641</td>\n",
       "      <td>0.141486</td>\n",
       "      <td>0.020361</td>\n",
       "      <td>0.826303</td>\n",
       "      <td>5.840182</td>\n",
       "      <td>0.016874</td>\n",
       "      <td>4.942589</td>\n",
       "      <td>0.849710</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>(/windowssupport, /msdownload, /windows)</td>\n",
       "      <td>(/isapi)</td>\n",
       "      <td>0.022440</td>\n",
       "      <td>0.162947</td>\n",
       "      <td>0.020361</td>\n",
       "      <td>0.907357</td>\n",
       "      <td>5.568414</td>\n",
       "      <td>0.016704</td>\n",
       "      <td>9.035247</td>\n",
       "      <td>0.839248</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>(/windowssupport, /isapi, /windows)</td>\n",
       "      <td>(/msdownload)</td>\n",
       "      <td>0.028737</td>\n",
       "      <td>0.331244</td>\n",
       "      <td>0.020361</td>\n",
       "      <td>0.708511</td>\n",
       "      <td>2.138937</td>\n",
       "      <td>0.010842</td>\n",
       "      <td>2.294271</td>\n",
       "      <td>0.548233</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>(/windowssupport, /msdownload)</td>\n",
       "      <td>(/isapi, /windows)</td>\n",
       "      <td>0.027209</td>\n",
       "      <td>0.045002</td>\n",
       "      <td>0.020361</td>\n",
       "      <td>0.748315</td>\n",
       "      <td>16.628649</td>\n",
       "      <td>0.019136</td>\n",
       "      <td>3.794414</td>\n",
       "      <td>0.966151</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                 antecedents  ... zhangs_metric\n",
       "0                          (/windowssupport)  ...      0.853053\n",
       "1                               (/sbnmember)  ...      0.908466\n",
       "2                               (/windows95)  ...      0.876392\n",
       "3                            (/ie, /windows)  ...      0.585538\n",
       "4                              (/isapi, /kb)  ...      0.847724\n",
       "5                     (/windowssupport, /kb)  ...      0.834122\n",
       "6             (/windowssupport, /msdownload)  ...      0.843008\n",
       "7                (/windowssupport, /support)  ...      0.825524\n",
       "8                (/windowssupport, /windows)  ...      0.841453\n",
       "9             (/windowssupport, /msdownload)  ...      0.851615\n",
       "10    (/windowssupport, /msdownload, /isapi)  ...      0.849710\n",
       "11  (/windowssupport, /msdownload, /windows)  ...      0.839248\n",
       "12       (/windowssupport, /isapi, /windows)  ...      0.548233\n",
       "13            (/windowssupport, /msdownload)  ...      0.966151\n",
       "\n",
       "[14 rows x 10 columns]"
      ]
     },
     "execution_count": 75,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rules\n"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 5. 结果分析与应用\n",
    "\n",
    "分析得到的关联规则，为网站提供导航结构优化建议，以提升用户体验。"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从以上规则可以看出，最显然的用户访问顺序喜好为Windows Support、isapi、Windows、MS Download等多个页面的访问，为了便于用户跳转查找，可以在相应页面放置指向相近页面的导航链接，从而简便用户的访问。"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "base",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.9"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
